//////////////////////////////////////////////////////////////////////
//
// NO_Manager.h
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
#ifndef NO_MANAGER_H
#define NO_MANAGER_H

//////////////////////////////////////////////////////////////////////////
// class NO_Manager definition
//////////////////////////////////////////////////////////////////////////
template <class T>
class NO_Manager  
{
public:
	//////////////////////////////////////////////////////////////////////
	typedef std::vector<T>::iterator	iterator;
	typedef std::vector<T>				Elements;
	typedef std::list<NO_UInt32 >		Free;

	//////////////////////////////////////////////////////////////////////
	// con/destruction
	//////////////////////////////////////////////////////////////////////
	
	//////////////////////////////////////////////////////////////////////
	NO_IDVector(void){}
	NO_IDVector(const NO_IDVector& rhs){}
	~NO_IDVector(){}
	
	//////////////////////////////////////////////////////////////////////
	// operators
	//////////////////////////////////////////////////////////////////////
	
	//////////////////////////////////////////////////////////////////////
	NO_IDVector& operator=(const NO_IDVector& rhs){}
	
	//////////////////////////////////////////////////////////////////////////
	NO_UInt32 erase(NO_UInt32 key)
	{
		if(elements.size()<=key){return 0;}
		
		Elements::iterator iter = elements.begin()+key;
		elements.push_back(key);
		(*iter) = 0;
		
		return 1;
	}
	
	//////////////////////////////////////////////////////////////////////////
	T& find(NO_UInt32 key)
	{
		if(elements.size()<=key){return 0;}
		
		Elements::iterator iter = elements.begin()+key;
		return 1;
	}
	
	//////////////////////////////////////////////////////////////////////////
	NO_UInt32 insert(T& obj)
	{
		if(free.empty())
		{
			NO_UInt32 key = elements.size();
			elements.push_back(obj);
			return key;
		}
		
		NO_UInt32 key = free.front();
		(*(elements.begin()+key)) = obj;
		free.pop_front();
		
		return 1;
	}
	
private:
	//////////////////////////////////////////////////////////////////////
	Elements elements;
	Free	 free;

};

#endif 

